package puzzlebn;

import java.util.ArrayList;
import java.util.List;

import aima.search.framework.Successor;
import aima.search.framework.SuccessorFunction;

public class PuzzleBNSuccessorFunction implements SuccessorFunction{
	
	@SuppressWarnings("unchecked")
	@Override
	public List getSuccessors(Object state) {
		
		// Creamos la lista donde almacenar los estados sucesores
		List<Successor> successors = new ArrayList<Successor>();
		
		PuzzleBNEstado estadoActual = (PuzzleBNEstado) state;
		
		PuzzleBNEstado nuevoEstado = null;
		
		// Para cada casilla del tablero...
		for (int i=0; i < estadoActual.getLongitud(); i++)
			// ...si es posible mover la ficha que haya ahi...
			if (estadoActual.esPosibleMover(i)){
				// ...se crea un estado nuevo (copia del actual)...
				nuevoEstado = new PuzzleBNEstado(estadoActual);
				// ...se realiza el movimiento...
				nuevoEstado.moverFicha(i);
				// ...y se almacena en la lista de sucesores
				successors.add(new Successor("Mov" + i, nuevoEstado));
			}

		
		return successors;
	}
}
